﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.IO;
using System.Windows.Forms;
using DAL;
using Entities;

namespace BL
{
    public class StockBLL 
    {

        public static DataSet CrearDataset(ref int? codigoError)
        {
            DataSet dt = null;
            try
            {                 
                dt = new DataSet();
                dt = DAL.StockDAL.CrearDataset();
            }
            catch(MySqlException ex)
            {
                if (ex.Number == 1042) //no se pudo abrir la conexion por falta de internet
                {
                    codigoError = ex.Number;
                    MessageBox.Show("No se pudo establecer la conexión con el servidor (verifique la conexión a internet). No se guardaron los cambios.",
                    "NcSoft", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            return dt;
        }

        public static DataSet CrearDataset(string whereLocales, int proveedor, string articulo, string descripcion, ref int? codigoError)
        {
            DataSet dt = new DataSet();
            try
            {
                dt = DAL.StockDAL.CrearDataset(whereLocales, proveedor, articulo, descripcion);
            }
            catch (MySqlException ex)
            {
                if (ex.Number == 1042) //no se pudo abrir la conexion por falta de internet
                {
                    codigoError = 1042;
                }
                else
                {
                    codigoError = ex.Number;
                }
            }
            return dt;
        }

        public static void InsertarDT(DataTable tabla, Stock entidad)
        {
            DAL.StockDAL.InsertarDT(tabla, entidad);
        }

        public static void ActualizarInsertDT(DataSet dsStock, DataView detalle, int origen, int destino) 
        {
            if (origen == 1)
            {
                DAL.StockDAL.EntradasDT(dsStock, detalle, destino);
            }
            else if (destino == 2)
            {
                DAL.StockDAL.SalidasDT(dsStock, detalle, origen);
            }
            else
            {
                DAL.StockDAL.EntradasDT(dsStock, detalle, destino);
                DAL.StockDAL.SalidasDT(dsStock, detalle, origen);
            }
        }

        public static void ActualizarBorradosDT(DataSet dsStock, DataView detalle, int origen, int destino)
        {
            if (origen == 1)
            {
                DAL.StockDAL.SalidasDT(dsStock, detalle, destino);
            }
            else if (destino == 2)
            {
                DAL.StockDAL.EntradasDT(dsStock, detalle, origen);
            }
            else
            {
                DAL.StockDAL.SalidasDT(dsStock, detalle, destino);
                DAL.StockDAL.EntradasDT(dsStock, detalle, origen);
            }
        }

        public static void ActualizarOrigenesDT(DataSet dsStock, DataView viewOriginal, int origenOriginal, int origenActual)
        {
            if (origenOriginal != 1) // 1 es entradas
            {
                DAL.StockDAL.EntradasDT(dsStock, viewOriginal, origenOriginal);
            }
            if (origenActual != 1) // 1 es entradas
            {
                DAL.StockDAL.SalidasDT(dsStock, viewOriginal, origenActual);
            }
        }

        public static void ActualizarDestinosDT(DataSet dsStock, DataView viewOriginal, int destinoOriginal, int destinoActual)
        {
            if (destinoOriginal != 2) // 2 es salidas
            {
                DAL.StockDAL.SalidasDT(dsStock, viewOriginal, destinoOriginal);
                
            }
            if (destinoActual != 2) 
            {
                DAL.StockDAL.EntradasDT(dsStock, viewOriginal, destinoActual);
            }
        }

        public static void SalidasVentasDT(DataSet dsStock, DataView detalle, int local)
        {
            DAL.StockDAL.SalidasVentasDT(dsStock, detalle, local);
        }

        public static void EntradasVentasDT(DataSet dsStock, DataView detalle, int local)
        {
            DAL.StockDAL.EntradasVentasDT(dsStock, detalle, local);
        }

        public static void GrabarDB(DataSet dt)
        {
            MySqlTransaction tr = null;
            try
            {
                MySqlConnection SqlConnection1 = DALBase.GetConnection();                
                SqlConnection1.Open();
                tr = SqlConnection1.BeginTransaction();
                DAL.StockDAL.GrabarDB(dt, SqlConnection1, tr);
             //   string strFilePath = Application.StartupPath + "\\Datasets_xml\\";
                string strFilePath = Application.StartupPath + "\\Datasets_xml\\";
                dt.Tables["Stock"].WriteXml(strFilePath + "Stock.xml", XmlWriteMode.WriteSchema);
                tr.Commit();
                SqlConnection1.Close();
            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.ToString(), "NcSoft", MessageBoxButtons.OK, MessageBoxIcon.Information);
                dt.RejectChanges();
                tr.Rollback();
            }
        }
    }
}
